package com.ddxz.tool.sql.parse;

import com.ddxz.tool.core.exception.DdxzBaseException;
import com.ddxz.tool.sql.parse.impl.BaseSqlParse;
import lombok.extern.slf4j.Slf4j;

import java.lang.reflect.Constructor;
import java.util.HashMap;
import java.util.Map;

import static com.ddxz.tool.sql.exception.SqlErrorStatus.UNKNOW_DATABASE;

/**
 * @description
 * @author 朱宗刚
 * @date 2019年10月23日
 * @version 1.0.0
 */

@Slf4j
public class SqlParseFactory {
    public static synchronized SqlParse createSqlParse(Class<? extends BaseSqlParse> clz) {
        if(instances.containsKey(clz)) {
            return instances.get(clz);
        }

        try{
            Constructor<?> constructor = clz.getDeclaredConstructor();
            constructor.setAccessible(true);
            instances.put(clz, (SqlParse) constructor.newInstance());

            return instances.get(clz);
        } catch (Exception e) {
            log.error(UNKNOW_DATABASE.getMessage(), e);
            throw new DdxzBaseException(UNKNOW_DATABASE, e);
        }
    }

    private static Map<Class<?>, SqlParse> instances = new HashMap<>(6);
}
